{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 辛普森卡通圖像角色偵測 - YOLOv2模型訓練與調整\n",
    "\n",
    "在[3.0: YOLO物體偵測演算法概念與介紹](https://github.com/erhwenkuo/deep-learning-with-keras-notebooks/blob/master/3.0-yolo-algorithm-introduction.ipynb)的文章裡介紹了YOLO演算法一些重要概念與其它物體偵測演算法的不同之處。\n",
    "\n",
    "這一篇文章則是要手把手地介紹使用[basic-yolo-keras](https://github.com/erhwenkuo/basic-yolo-keras)來將Darknet預訓練的模型進行再訓練與調整來偵測\"辛普森一家\"的卡通視頻的20個角色。\n",
    "\n",
    "![The Simpsons characters](https://www.researchgate.net/profile/Rao_Anwer/publication/228642280/figure/fig1/AS:301830128062464@1448973318093/Figure-1-Find-the-Simpsons-On-the-left-the-conventional-part-based-approach-10.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## basic-yolo-keras 專案說明\n",
    "\n",
    "[basic-yolo-keras](https://github.com/experiencor/basic-yolo-keras)包含在Keras中使用Tensorflow後端的YOLOv2演算方的實現。它支持訓練YOLOv2網絡與不同的網絡結構，如MobileNet和InceptionV3。\n",
    "\n",
    "由於原始的專案[experiencor/basic-yolo-keras](https://github.com/experiencor/basic-yolo-keras)主要以英文來說明演算法的實現與再訓練， 對於一些剛入門深度學習的學習者來說，有一些不容易理解與入手的情況。\n",
    "\n",
    "因此在這個專案的方向在於文件說明的中文化以外，同時也會以一些便於使用與學習的角度進行源碼的調整與修正。\n",
    "\n",
    "### 需求\n",
    "\n",
    "- [Keras](https://github.com/fchollet/keras)\n",
    "- [Tensorflow](https://www.tensorflow.org/)\n",
    "- [Numpy](http://www.numpy.org/)\n",
    "- [h5py](http://www.h5py.org/) (For Keras model serialization.)\n",
    "- [Pillow](https://pillow.readthedocs.io/) (For rendering test results.)\n",
    "- [Python 3](https://www.python.org/)\n",
    "- [pydot-ng](https://github.com/pydot/pydot-ng) (Optional for plotting model.)\n",
    "\n",
    "### 安裝\n",
    "\n",
    "```bash\n",
    "git clone https://github.com/erhwenkuo/basic-yolo-keras.git\n",
    "cd basic-yolo-keras\n",
    "\n",
    "pip install numpy h5py pillow\n",
    "pip install tensorflow-gpu  # CPU-only: conda install -c conda-forge tensorflow\n",
    "pip install keras # Possibly older release: conda install keras\n",
    "...\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 資料集說明\n",
    "\n",
    "Alexandre仍然持續在建立與更新這個數據集（標籤圖片），新的更新資料集會會上傳到Kaggle中。請檢查文件是否有說明和解釋。\n",
    "\n",
    "* 文件 `simpson-set.tar.gz`：這是一個圖像數據集：20個文件夾（每個字符一個），每個文件夾中有400-2000不等的圖像。\n",
    "* 文件 `simpson-test-set.zip`：用來測試模型預測結果的圖像數據集\n",
    "* 文件 `annotation.txt`：每個卡通人物在圖像中的邊界框的註釋文件\n",
    "\n",
    "訓練集包括每個角色約1000個圖像。角色在圖像中的位置不一定都是位於中央，有時可能圖像中除了主要角色外也會有其他角色（但主角應該是圖片中最重要的部分）。\n",
    "\n",
    "在這篇文章中只會訓練與辨識18個角色(別外2個角色的圖像資料仍然在持續收集中)。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 專案的檔案路徑佈局\n",
    "\n",
    "1. 從[YOLO官方網站](http://pjreddie.com/darknet/yolo/)下載Darknet模型的設置檔與權重檔到專案根目錄。例如:使用MS COCO資料集訓練的預訓練模型\n",
    "    * 下載[YOLOv2 608x608 設置檔(yolo.cfg)](https://github.com/pjreddie/darknet/blob/master/cfg/yolo.cfg)\n",
    "    * 下載[YOLOv2 608x608 權重檔(yolo.weights)](https://pjreddie.com/media/files/yolo.weights)\n",
    "2. 在`basic-yolo-keras`的目錄裡產生一個子目錄`data`與`data/simpson`\n",
    "3. 從[Kaggle](https://www.kaggle.com/alexattia/the-simpsons-characters-dataset/kernels)點擊`Download All`下載圖像資料檔\"the-simpsons-characters-dataset.zip\"。\n",
    "4. 解壓縮圖像資料檔到\"data/simpson\"的目錄裡頭。\n",
    "5. 將\"kaggle_simpson_testset\"目錄重新命名為\"test\"。\n",
    "6. 在\"data/simpson\"的目錄裡頭產生一個新的子目錄\"train\"。\n",
    "7. 把壓縮檔\"simpsons_dataset.tar.gz\"搬移到\"data/simpson/train\"的目錄然後進行解壓縮。\n",
    "\n",
    "最後你的目錄結構看起來像這樣: (這裡只列出來在這個範例會用到的相關檔案與目錄)\n",
    "    \n",
    "```\n",
    "basic-yolo-keras/\n",
    "├── xxxx.ipynb\n",
    "├── yolo.weights\n",
    "├── backend.py\n",
    "├── preprocessing.py\n",
    "├── utils.py\n",
    "├── font/\n",
    "│   └── FiraMono-Medium.otf\n",
    "├── yolo.weights\n",
    "└── data/\n",
    "    └── simpson/\n",
    "        ├── annotation.txt                       <--- 標註檔的位置\n",
    "        ├── test/\n",
    "        │   ├── abraham_grampa_simpson_0.jpeg\n",
    "        │   ├── abraham_grampa_simpson_1.jpeg\n",
    "        │   ├── ..\n",
    "        │   └── sideshow_bob_49.jpeg\n",
    "        └── train/                               <--- 訓練圖像的位置(每個子目錄都是一個角色)\n",
    "            ├── abraham_grampa_simpson/\n",
    "            ├── agnes_skinner/\n",
    "            ├── ..\n",
    "            └── waylon_smithers/\n",
    "    \n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### STEP 1. 載入相關函式庫"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:33:44.138409Z",
     "start_time": "2017-11-26T12:33:41.531465Z"
    },
    "code_folding": [],
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "# Utilities相關函式庫\n",
    "import os\n",
    "import random\n",
    "from tqdm import tqdm\n",
    "\n",
    "# 多維向量處理相關函式庫\n",
    "import numpy as np\n",
    "\n",
    "# 讓Keras只使用GPU來進行訓練\n",
    "os.environ[\"CUDA_DEVICE_ORDER\"] = \"PCI_BUS_ID\"\n",
    "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"\"\n",
    "\n",
    "# 圖像處理相關函式庫\n",
    "import cv2\n",
    "import imgaug as ia\n",
    "from imgaug import augmenters as iaa\n",
    "import colorsys\n",
    "import matplotlib.pyplot as plt\n",
    "from PIL import Image, ImageDraw, ImageFont\n",
    "%matplotlib inline\n",
    "\n",
    "# 序列/反序列化相關函式庫\n",
    "import pickle\n",
    "\n",
    "# 深度學習相關函式庫\n",
    "from keras.models import Sequential, Model\n",
    "from keras.layers import Reshape, Activation, Conv2D, Input, MaxPooling2D, BatchNormalization, Flatten, Dense, Lambda\n",
    "from keras.layers.advanced_activations import LeakyReLU\n",
    "from keras.callbacks import EarlyStopping, ModelCheckpoint, TensorBoard\n",
    "from keras.optimizers import SGD, Adam, RMSprop\n",
    "from keras.layers.merge import concatenate\n",
    "import keras.backend as K\n",
    "import tensorflow as tf\n",
    "\n",
    "# 專案相關函式庫\n",
    "from preprocessing import parse_annotation, BatchGenerator\n",
    "from utils import WeightReader, decode_netout, draw_boxes, normalize\n",
    "from utils import draw_bgr_image_boxes, draw_rgb_image_boxes, draw_pil_image_boxes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 設定相關設定與參數"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 專案的根目錄路徑\n",
    "ROOT_DIR = os.getcwd()\n",
    "\n",
    "# 訓練/驗證用的資料目錄\n",
    "DATA_PATH = os.path.join(ROOT_DIR, \"data\")\n",
    "\n",
    "# 資料集目錄\n",
    "DATA_SET_PATH = os.path.join(DATA_PATH, \"simpson\")\n",
    "\n",
    "# 資料集標註檔\n",
    "ANNOTATIONS_FILE = os.path.join(DATA_PATH, \"annotations.txt\")\n",
    "\n",
    "# 資料集圖像檔目錄\n",
    "IMAGES_PATH = os.path.join(DATA_SET_PATH, \"train\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 定義圖像的類別\n",
    "\n",
    "在這個圖像資料集裡我們會偵測18種辛普森卡通角色類別。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['abraham_grampa_simpson', 'apu_nahasapeemapetilon', 'bart_simpson', 'charles_montgomery_burns', 'chief_wiggum', 'comic_book_guy', 'edna_krabappel', 'homer_simpson', 'kent_brockman', 'krusty_the_clown', 'lisa_simpson', 'marge_simpson', 'milhouse_van_houten', 'moe_szyslak', 'ned_flanders', 'nelson_muntz', 'principal_skinner', 'sideshow_bob']\n"
     ]
    }
   ],
   "source": [
    "# 卡通角色的Label-encoding\n",
    "map_characters = {0: 'abraham_grampa_simpson', 1: 'apu_nahasapeemapetilon', 2: 'bart_simpson', \n",
    "        3: 'charles_montgomery_burns', 4: 'chief_wiggum', 5: 'comic_book_guy', 6: 'edna_krabappel', \n",
    "        7: 'homer_simpson', 8: 'kent_brockman', 9: 'krusty_the_clown', 10: 'lisa_simpson', \n",
    "        11: 'marge_simpson', 12: 'milhouse_van_houten', 13: 'moe_szyslak', \n",
    "        14: 'ned_flanders', 15: 'nelson_muntz', 16: 'principal_skinner', 17: 'sideshow_bob'}\n",
    "\n",
    "# 取得所有圖像的圖像類別列表\n",
    "labels=list(map_characters.values())\n",
    "\n",
    "print(labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 設定YOLOv2模型的設定與參數"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:33:52.507849Z",
     "start_time": "2017-11-26T12:33:52.487930Z"
    },
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "LABELS = labels # 圖像類別\n",
    "\n",
    "IMAGE_H, IMAGE_W = 416, 416 # 模型輸入的圖像長寬\n",
    "GRID_H,  GRID_W  = 13 , 13\n",
    "BOX              = 5\n",
    "CLASS            = len(LABELS)\n",
    "CLASS_WEIGHTS    = np.ones(CLASS, dtype='float32')\n",
    "OBJ_THRESHOLD    = 0.3\n",
    "NMS_THRESHOLD    = 0.3 # NMS非極大值抑制 , 說明(https://chenzomi12.github.io/2016/12/14/YOLO-nms/)\n",
    "ANCHORS          = [0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828]\n",
    "\n",
    "NO_OBJECT_SCALE  = 1.0\n",
    "OBJECT_SCALE     = 5.0\n",
    "COORD_SCALE      = 1.0\n",
    "CLASS_SCALE      = 1.0\n",
    "\n",
    "BATCH_SIZE       = 16\n",
    "WARM_UP_BATCHES  = 0\n",
    "TRUE_BOX_BUFFER  = 50"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Darknet預訓練權重檔與訓練/驗證資料目錄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:33:56.177021Z",
     "start_time": "2017-11-26T12:33:56.172746Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "wt_path = 'yolo.weights'\n",
    "\n",
    "train_image_folder = IMAGES_PATH\n",
    "train_annot_folder = DATA_SET_PATH\n",
    "valid_image_folder = IMAGES_PATH\n",
    "valid_annot_folder = DATA_SET_PATH"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### STEP 2. 構建YOLOv2網絡結構模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:33:58.179391Z",
     "start_time": "2017-11-26T12:33:58.175696Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# the function to implement the orgnization layer (thanks to github.com/allanzelener/YAD2K)\n",
    "def space_to_depth_x2(x):\n",
    "    return tf.space_to_depth(x, block_size=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:34:01.523076Z",
     "start_time": "2017-11-26T12:34:00.007828Z"
    },
    "code_folding": [],
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "input_image = Input(shape=(IMAGE_H, IMAGE_W, 3))\n",
    "true_boxes  = Input(shape=(1, 1, 1, TRUE_BOX_BUFFER , 4))\n",
    "\n",
    "# Layer 1\n",
    "x = Conv2D(32, (3,3), strides=(1,1), padding='same', name='conv_1', use_bias=False)(input_image)\n",
    "x = BatchNormalization(name='norm_1')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "x = MaxPooling2D(pool_size=(2, 2))(x)\n",
    "\n",
    "# Layer 2\n",
    "x = Conv2D(64, (3,3), strides=(1,1), padding='same', name='conv_2', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_2')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "x = MaxPooling2D(pool_size=(2, 2))(x)\n",
    "\n",
    "# Layer 3\n",
    "x = Conv2D(128, (3,3), strides=(1,1), padding='same', name='conv_3', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_3')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 4\n",
    "x = Conv2D(64, (1,1), strides=(1,1), padding='same', name='conv_4', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_4')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 5\n",
    "x = Conv2D(128, (3,3), strides=(1,1), padding='same', name='conv_5', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_5')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "x = MaxPooling2D(pool_size=(2, 2))(x)\n",
    "\n",
    "# Layer 6\n",
    "x = Conv2D(256, (3,3), strides=(1,1), padding='same', name='conv_6', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_6')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 7\n",
    "x = Conv2D(128, (1,1), strides=(1,1), padding='same', name='conv_7', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_7')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 8\n",
    "x = Conv2D(256, (3,3), strides=(1,1), padding='same', name='conv_8', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_8')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "x = MaxPooling2D(pool_size=(2, 2))(x)\n",
    "\n",
    "# Layer 9\n",
    "x = Conv2D(512, (3,3), strides=(1,1), padding='same', name='conv_9', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_9')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 10\n",
    "x = Conv2D(256, (1,1), strides=(1,1), padding='same', name='conv_10', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_10')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 11\n",
    "x = Conv2D(512, (3,3), strides=(1,1), padding='same', name='conv_11', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_11')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 12\n",
    "x = Conv2D(256, (1,1), strides=(1,1), padding='same', name='conv_12', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_12')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 13\n",
    "x = Conv2D(512, (3,3), strides=(1,1), padding='same', name='conv_13', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_13')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "skip_connection = x\n",
    "\n",
    "x = MaxPooling2D(pool_size=(2, 2))(x)\n",
    "\n",
    "# Layer 14\n",
    "x = Conv2D(1024, (3,3), strides=(1,1), padding='same', name='conv_14', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_14')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 15\n",
    "x = Conv2D(512, (1,1), strides=(1,1), padding='same', name='conv_15', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_15')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 16\n",
    "x = Conv2D(1024, (3,3), strides=(1,1), padding='same', name='conv_16', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_16')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 17\n",
    "x = Conv2D(512, (1,1), strides=(1,1), padding='same', name='conv_17', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_17')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 18\n",
    "x = Conv2D(1024, (3,3), strides=(1,1), padding='same', name='conv_18', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_18')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 19\n",
    "x = Conv2D(1024, (3,3), strides=(1,1), padding='same', name='conv_19', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_19')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 20\n",
    "x = Conv2D(1024, (3,3), strides=(1,1), padding='same', name='conv_20', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_20')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 21\n",
    "skip_connection = Conv2D(64, (1,1), strides=(1,1), padding='same', name='conv_21', use_bias=False)(skip_connection)\n",
    "skip_connection = BatchNormalization(name='norm_21')(skip_connection)\n",
    "skip_connection = LeakyReLU(alpha=0.1)(skip_connection)\n",
    "skip_connection = Lambda(space_to_depth_x2)(skip_connection)\n",
    "\n",
    "x = concatenate([skip_connection, x])\n",
    "\n",
    "# Layer 22\n",
    "x = Conv2D(1024, (3,3), strides=(1,1), padding='same', name='conv_22', use_bias=False)(x)\n",
    "x = BatchNormalization(name='norm_22')(x)\n",
    "x = LeakyReLU(alpha=0.1)(x)\n",
    "\n",
    "# Layer 23\n",
    "x = Conv2D(BOX * (4 + 1 + CLASS), (1,1), strides=(1,1), padding='same', name='conv_23')(x)\n",
    "output = Reshape((GRID_H, GRID_W, BOX, 4 + 1 + CLASS))(x)\n",
    "\n",
    "# small hack to allow true_boxes to be registered when Keras build the model \n",
    "# for more information: https://github.com/fchollet/keras/issues/2790\n",
    "output = Lambda(lambda args: args[0])([output, true_boxes])\n",
    "\n",
    "model = Model([input_image, true_boxes], output)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:34:03.819802Z",
     "start_time": "2017-11-26T12:34:03.786125Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_1 (InputLayer)            (None, 416, 416, 3)  0                                            \n",
      "__________________________________________________________________________________________________\n",
      "conv_1 (Conv2D)                 (None, 416, 416, 32) 864         input_1[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "norm_1 (BatchNormalization)     (None, 416, 416, 32) 128         conv_1[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_1 (LeakyReLU)       (None, 416, 416, 32) 0           norm_1[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling2d_1 (MaxPooling2D)  (None, 208, 208, 32) 0           leaky_re_lu_1[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv_2 (Conv2D)                 (None, 208, 208, 64) 18432       max_pooling2d_1[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "norm_2 (BatchNormalization)     (None, 208, 208, 64) 256         conv_2[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_2 (LeakyReLU)       (None, 208, 208, 64) 0           norm_2[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling2d_2 (MaxPooling2D)  (None, 104, 104, 64) 0           leaky_re_lu_2[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv_3 (Conv2D)                 (None, 104, 104, 128 73728       max_pooling2d_2[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "norm_3 (BatchNormalization)     (None, 104, 104, 128 512         conv_3[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_3 (LeakyReLU)       (None, 104, 104, 128 0           norm_3[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv_4 (Conv2D)                 (None, 104, 104, 64) 8192        leaky_re_lu_3[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "norm_4 (BatchNormalization)     (None, 104, 104, 64) 256         conv_4[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_4 (LeakyReLU)       (None, 104, 104, 64) 0           norm_4[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv_5 (Conv2D)                 (None, 104, 104, 128 73728       leaky_re_lu_4[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "norm_5 (BatchNormalization)     (None, 104, 104, 128 512         conv_5[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_5 (LeakyReLU)       (None, 104, 104, 128 0           norm_5[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling2d_3 (MaxPooling2D)  (None, 52, 52, 128)  0           leaky_re_lu_5[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv_6 (Conv2D)                 (None, 52, 52, 256)  294912      max_pooling2d_3[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "norm_6 (BatchNormalization)     (None, 52, 52, 256)  1024        conv_6[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_6 (LeakyReLU)       (None, 52, 52, 256)  0           norm_6[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv_7 (Conv2D)                 (None, 52, 52, 128)  32768       leaky_re_lu_6[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "norm_7 (BatchNormalization)     (None, 52, 52, 128)  512         conv_7[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_7 (LeakyReLU)       (None, 52, 52, 128)  0           norm_7[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv_8 (Conv2D)                 (None, 52, 52, 256)  294912      leaky_re_lu_7[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "norm_8 (BatchNormalization)     (None, 52, 52, 256)  1024        conv_8[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_8 (LeakyReLU)       (None, 52, 52, 256)  0           norm_8[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling2d_4 (MaxPooling2D)  (None, 26, 26, 256)  0           leaky_re_lu_8[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "conv_9 (Conv2D)                 (None, 26, 26, 512)  1179648     max_pooling2d_4[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "norm_9 (BatchNormalization)     (None, 26, 26, 512)  2048        conv_9[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_9 (LeakyReLU)       (None, 26, 26, 512)  0           norm_9[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "conv_10 (Conv2D)                (None, 26, 26, 256)  131072      leaky_re_lu_9[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "norm_10 (BatchNormalization)    (None, 26, 26, 256)  1024        conv_10[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_10 (LeakyReLU)      (None, 26, 26, 256)  0           norm_10[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_11 (Conv2D)                (None, 26, 26, 512)  1179648     leaky_re_lu_10[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "norm_11 (BatchNormalization)    (None, 26, 26, 512)  2048        conv_11[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_11 (LeakyReLU)      (None, 26, 26, 512)  0           norm_11[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_12 (Conv2D)                (None, 26, 26, 256)  131072      leaky_re_lu_11[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "norm_12 (BatchNormalization)    (None, 26, 26, 256)  1024        conv_12[0][0]                    \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_12 (LeakyReLU)      (None, 26, 26, 256)  0           norm_12[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_13 (Conv2D)                (None, 26, 26, 512)  1179648     leaky_re_lu_12[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "norm_13 (BatchNormalization)    (None, 26, 26, 512)  2048        conv_13[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_13 (LeakyReLU)      (None, 26, 26, 512)  0           norm_13[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling2d_5 (MaxPooling2D)  (None, 13, 13, 512)  0           leaky_re_lu_13[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "conv_14 (Conv2D)                (None, 13, 13, 1024) 4718592     max_pooling2d_5[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "norm_14 (BatchNormalization)    (None, 13, 13, 1024) 4096        conv_14[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_14 (LeakyReLU)      (None, 13, 13, 1024) 0           norm_14[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_15 (Conv2D)                (None, 13, 13, 512)  524288      leaky_re_lu_14[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "norm_15 (BatchNormalization)    (None, 13, 13, 512)  2048        conv_15[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_15 (LeakyReLU)      (None, 13, 13, 512)  0           norm_15[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_16 (Conv2D)                (None, 13, 13, 1024) 4718592     leaky_re_lu_15[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "norm_16 (BatchNormalization)    (None, 13, 13, 1024) 4096        conv_16[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_16 (LeakyReLU)      (None, 13, 13, 1024) 0           norm_16[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_17 (Conv2D)                (None, 13, 13, 512)  524288      leaky_re_lu_16[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "norm_17 (BatchNormalization)    (None, 13, 13, 512)  2048        conv_17[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_17 (LeakyReLU)      (None, 13, 13, 512)  0           norm_17[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_18 (Conv2D)                (None, 13, 13, 1024) 4718592     leaky_re_lu_17[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "norm_18 (BatchNormalization)    (None, 13, 13, 1024) 4096        conv_18[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_18 (LeakyReLU)      (None, 13, 13, 1024) 0           norm_18[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_19 (Conv2D)                (None, 13, 13, 1024) 9437184     leaky_re_lu_18[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "norm_19 (BatchNormalization)    (None, 13, 13, 1024) 4096        conv_19[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_21 (Conv2D)                (None, 26, 26, 64)   32768       leaky_re_lu_13[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_19 (LeakyReLU)      (None, 13, 13, 1024) 0           norm_19[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "norm_21 (BatchNormalization)    (None, 26, 26, 64)   256         conv_21[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_20 (Conv2D)                (None, 13, 13, 1024) 9437184     leaky_re_lu_19[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_21 (LeakyReLU)      (None, 26, 26, 64)   0           norm_21[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "norm_20 (BatchNormalization)    (None, 13, 13, 1024) 4096        conv_20[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "lambda_1 (Lambda)               (None, 13, 13, 256)  0           leaky_re_lu_21[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_20 (LeakyReLU)      (None, 13, 13, 1024) 0           norm_20[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_1 (Concatenate)     (None, 13, 13, 1280) 0           lambda_1[0][0]                   \n",
      "                                                                 leaky_re_lu_20[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "conv_22 (Conv2D)                (None, 13, 13, 1024) 11796480    concatenate_1[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "norm_22 (BatchNormalization)    (None, 13, 13, 1024) 4096        conv_22[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "leaky_re_lu_22 (LeakyReLU)      (None, 13, 13, 1024) 0           norm_22[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "conv_23 (Conv2D)                (None, 13, 13, 115)  117875      leaky_re_lu_22[0][0]             \n",
      "__________________________________________________________________________________________________\n",
      "reshape_1 (Reshape)             (None, 13, 13, 5, 23 0           conv_23[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "input_2 (InputLayer)            (None, 1, 1, 1, 50,  0                                            \n",
      "__________________________________________________________________________________________________\n",
      "lambda_2 (Lambda)               (None, 13, 13, 5, 23 0           reshape_1[0][0]                  \n",
      "                                                                 input_2[0][0]                    \n",
      "==================================================================================================\n",
      "Total params: 50,665,811\n",
      "Trainable params: 50,645,139\n",
      "Non-trainable params: 20,672\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### STEP 3. 載入預訓練的模型權重"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Load the weights originally provided by YOLO**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:34:06.976188Z",
     "start_time": "2017-11-26T12:34:06.232200Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "weight_reader = WeightReader(wt_path) # 初始讀取Darknet預訓練權重檔物件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:34:11.559043Z",
     "start_time": "2017-11-26T12:34:08.310987Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "handle norm_1 start\n",
      "shape:  (32,)\n",
      "handle norm_1 completed\n",
      "handle conv_1 start\n",
      "handle conv_1 completed\n",
      "handle norm_2 start\n",
      "shape:  (64,)\n",
      "handle norm_2 completed\n",
      "handle conv_2 start\n",
      "handle conv_2 completed\n",
      "handle norm_3 start\n",
      "shape:  (128,)\n",
      "handle norm_3 completed\n",
      "handle conv_3 start\n",
      "handle conv_3 completed\n",
      "handle norm_4 start\n",
      "shape:  (64,)\n",
      "handle norm_4 completed\n",
      "handle conv_4 start\n",
      "handle conv_4 completed\n",
      "handle norm_5 start\n",
      "shape:  (128,)\n",
      "handle norm_5 completed\n",
      "handle conv_5 start\n",
      "handle conv_5 completed\n",
      "handle norm_6 start\n",
      "shape:  (256,)\n",
      "handle norm_6 completed\n",
      "handle conv_6 start\n",
      "handle conv_6 completed\n",
      "handle norm_7 start\n",
      "shape:  (128,)\n",
      "handle norm_7 completed\n",
      "handle conv_7 start\n",
      "handle conv_7 completed\n",
      "handle norm_8 start\n",
      "shape:  (256,)\n",
      "handle norm_8 completed\n",
      "handle conv_8 start\n",
      "handle conv_8 completed\n",
      "handle norm_9 start\n",
      "shape:  (512,)\n",
      "handle norm_9 completed\n",
      "handle conv_9 start\n",
      "handle conv_9 completed\n",
      "handle norm_10 start\n",
      "shape:  (256,)\n",
      "handle norm_10 completed\n",
      "handle conv_10 start\n",
      "handle conv_10 completed\n",
      "handle norm_11 start\n",
      "shape:  (512,)\n",
      "handle norm_11 completed\n",
      "handle conv_11 start\n",
      "handle conv_11 completed\n",
      "handle norm_12 start\n",
      "shape:  (256,)\n",
      "handle norm_12 completed\n",
      "handle conv_12 start\n",
      "handle conv_12 completed\n",
      "handle norm_13 start\n",
      "shape:  (512,)\n",
      "handle norm_13 completed\n",
      "handle conv_13 start\n",
      "handle conv_13 completed\n",
      "handle norm_14 start\n",
      "shape:  (1024,)\n",
      "handle norm_14 completed\n",
      "handle conv_14 start\n",
      "handle conv_14 completed\n",
      "handle norm_15 start\n",
      "shape:  (512,)\n",
      "handle norm_15 completed\n",
      "handle conv_15 start\n",
      "handle conv_15 completed\n",
      "handle norm_16 start\n",
      "shape:  (1024,)\n",
      "handle norm_16 completed\n",
      "handle conv_16 start\n",
      "handle conv_16 completed\n",
      "handle norm_17 start\n",
      "shape:  (512,)\n",
      "handle norm_17 completed\n",
      "handle conv_17 start\n",
      "handle conv_17 completed\n",
      "handle norm_18 start\n",
      "shape:  (1024,)\n",
      "handle norm_18 completed\n",
      "handle conv_18 start\n",
      "handle conv_18 completed\n",
      "handle norm_19 start\n",
      "shape:  (1024,)\n",
      "handle norm_19 completed\n",
      "handle conv_19 start\n",
      "handle conv_19 completed\n",
      "handle norm_20 start\n",
      "shape:  (1024,)\n",
      "handle norm_20 completed\n",
      "handle conv_20 start\n",
      "handle conv_20 completed\n",
      "handle norm_21 start\n",
      "shape:  (64,)\n",
      "handle norm_21 completed\n",
      "handle conv_21 start\n",
      "handle conv_21 completed\n",
      "handle norm_22 start\n",
      "shape:  (1024,)\n",
      "handle norm_22 completed\n",
      "handle conv_22 start\n",
      "handle conv_22 completed\n",
      "handle conv_23 start\n",
      "len: 2\n",
      "handle conv_23 completed\n"
     ]
    }
   ],
   "source": [
    "weight_reader.reset()\n",
    "nb_conv = 23 # 總共有23層的卷積層\n",
    "\n",
    "for i in range(1, nb_conv+1):\n",
    "    conv_layer = model.get_layer('conv_' + str(i))\n",
    "    \n",
    "    # 在conv_1~conv_22的卷積組合裡都包含了\"conv + norm\"二層, 只有conv_23是獨立一層    \n",
    "    if i < nb_conv: \n",
    "        print(\"handle norm_\" + str(i) + \" start\")        \n",
    "        norm_layer = model.get_layer('norm_' + str(i)) # 取得BatchNormalization層\n",
    "        \n",
    "        size = np.prod(norm_layer.get_weights()[0].shape) # 取得BatchNormalization層的參數量\n",
    "        print(\"shape: \", norm_layer.get_weights()[0].shape)\n",
    "        \n",
    "        beta  = weight_reader.read_bytes(size)\n",
    "        gamma = weight_reader.read_bytes(size)\n",
    "        mean  = weight_reader.read_bytes(size)\n",
    "        var   = weight_reader.read_bytes(size)\n",
    "        weights = norm_layer.set_weights([gamma, beta, mean, var])\n",
    "        print(\"handle norm_\" + str(i) + \" completed\")\n",
    "        \n",
    "    if len(conv_layer.get_weights()) > 1:\n",
    "        print(\"handle conv_\" + str(i) + \" start\")  \n",
    "        print(\"len:\",len(conv_layer.get_weights()))\n",
    "        bias   = weight_reader.read_bytes(np.prod(conv_layer.get_weights()[1].shape))\n",
    "        kernel = weight_reader.read_bytes(np.prod(conv_layer.get_weights()[0].shape))\n",
    "        kernel = kernel.reshape(list(reversed(conv_layer.get_weights()[0].shape)))\n",
    "        kernel = kernel.transpose([2,3,1,0])\n",
    "        conv_layer.set_weights([kernel, bias])\n",
    "        print(\"handle conv_\" + str(i) + \" completed\")\n",
    "    else:\n",
    "        print(\"handle conv_\" + str(i) + \" start\")        \n",
    "        kernel = weight_reader.read_bytes(np.prod(conv_layer.get_weights()[0].shape))\n",
    "        kernel = kernel.reshape(list(reversed(conv_layer.get_weights()[0].shape)))\n",
    "        kernel = kernel.transpose([2,3,1,0])\n",
    "        conv_layer.set_weights([kernel])\n",
    "        print(\"handle conv_\" + str(i) + \" completed\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### STEP 4. 設定要微調(fine-tune)的模型層級權重\n",
    "\n",
    "**Randomize weights of the last layer**\n",
    "\n",
    "由於在YOLOv2的模型中, 最後一層卷積層決定了最後的輸出, 讓我們重新來調整與訓練這一層的卷積層來讓預訓練的模型可以讓我們進行所需要的微調。\n",
    "詳細的概念與說明,見 [1.5: 使用預先訓練的卷積網絡模型](https://github.com/erhwenkuo/deep-learning-with-keras-notebooks/blob/master/1.5-use-pretrained-model-2.ipynb)。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-22T14:08:00.245248Z",
     "start_time": "2017-11-22T14:08:00.215495Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "layer   = model.layers[-4] # the last convolutional layer\n",
    "weights = layer.get_weights()\n",
    "\n",
    "new_kernel = np.random.normal(size=weights[0].shape)/(GRID_H*GRID_W)\n",
    "new_bias   = np.random.normal(size=weights[1].shape)/(GRID_H*GRID_W)\n",
    "\n",
    "layer.set_weights([new_kernel, new_bias])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### STEP 5. 模型訓練"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**YOLOv2訓練用的損失函數:**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-02-01T20:44:50.211553",
     "start_time": "2017-02-01T20:44:50.206006"
    }
   },
   "source": [
    "$$\\begin{multline}\n",
    "\\lambda_\\textbf{coord}\n",
    "\\sum_{i = 0}^{S^2}\n",
    "    \\sum_{j = 0}^{B}\n",
    "     L_{ij}^{\\text{obj}}\n",
    "            \\left[\n",
    "            \\left(\n",
    "                x_i - \\hat{x}_i\n",
    "            \\right)^2 +\n",
    "            \\left(\n",
    "                y_i - \\hat{y}_i\n",
    "            \\right)^2\n",
    "            \\right]\n",
    "\\\\\n",
    "+ \\lambda_\\textbf{coord} \n",
    "\\sum_{i = 0}^{S^2}\n",
    "    \\sum_{j = 0}^{B}\n",
    "         L_{ij}^{\\text{obj}}\n",
    "         \\left[\n",
    "        \\left(\n",
    "            \\sqrt{w_i} - \\sqrt{\\hat{w}_i}\n",
    "        \\right)^2 +\n",
    "        \\left(\n",
    "            \\sqrt{h_i} - \\sqrt{\\hat{h}_i}\n",
    "        \\right)^2\n",
    "        \\right]\n",
    "\\\\\n",
    "+ \\sum_{i = 0}^{S^2}\n",
    "    \\sum_{j = 0}^{B}\n",
    "        L_{ij}^{\\text{obj}}\n",
    "        \\left(\n",
    "            C_i - \\hat{C}_i\n",
    "        \\right)^2\n",
    "\\\\\n",
    "+ \\lambda_\\textrm{noobj}\n",
    "\\sum_{i = 0}^{S^2}\n",
    "    \\sum_{j = 0}^{B}\n",
    "    L_{ij}^{\\text{noobj}}\n",
    "        \\left(\n",
    "            C_i - \\hat{C}_i\n",
    "        \\right)^2\n",
    "\\\\\n",
    "+ \\sum_{i = 0}^{S^2}\n",
    "L_i^{\\text{obj}}\n",
    "    \\sum_{c \\in \\textrm{classes}}\n",
    "        \\left(\n",
    "            p_i(c) - \\hat{p}_i(c)\n",
    "        \\right)^2\n",
    "\\end{multline}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:34:28.064549Z",
     "start_time": "2017-11-26T12:34:27.800510Z"
    },
    "code_folding": [],
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def custom_loss(y_true, y_pred):\n",
    "    mask_shape = tf.shape(y_true)[:4]\n",
    "    \n",
    "    cell_x = tf.to_float(tf.reshape(tf.tile(tf.range(GRID_W), [GRID_H]), (1, GRID_H, GRID_W, 1, 1)))\n",
    "    cell_y = tf.transpose(cell_x, (0,2,1,3,4))\n",
    "\n",
    "    cell_grid = tf.tile(tf.concat([cell_x,cell_y], -1), [BATCH_SIZE, 1, 1, 5, 1])\n",
    "    \n",
    "    coord_mask = tf.zeros(mask_shape)\n",
    "    conf_mask  = tf.zeros(mask_shape)\n",
    "    class_mask = tf.zeros(mask_shape)\n",
    "    \n",
    "    seen = tf.Variable(0.)\n",
    "    total_recall = tf.Variable(0.)\n",
    "    \n",
    "    \"\"\"\n",
    "    Adjust prediction\n",
    "    \"\"\"\n",
    "    ### adjust x and y      \n",
    "    pred_box_xy = tf.sigmoid(y_pred[..., :2]) + cell_grid\n",
    "    \n",
    "    ### adjust w and h\n",
    "    pred_box_wh = tf.exp(y_pred[..., 2:4]) * np.reshape(ANCHORS, [1,1,1,BOX,2])\n",
    "    \n",
    "    ### adjust confidence\n",
    "    pred_box_conf = tf.sigmoid(y_pred[..., 4])\n",
    "    \n",
    "    ### adjust class probabilities\n",
    "    pred_box_class = y_pred[..., 5:]\n",
    "    \n",
    "    \"\"\"\n",
    "    Adjust ground truth\n",
    "    \"\"\"\n",
    "    ### adjust x and y\n",
    "    true_box_xy = y_true[..., 0:2] # relative position to the containing cell\n",
    "    \n",
    "    ### adjust w and h\n",
    "    true_box_wh = y_true[..., 2:4] # number of cells accross, horizontally and vertically\n",
    "    \n",
    "    ### adjust confidence\n",
    "    true_wh_half = true_box_wh / 2.\n",
    "    true_mins    = true_box_xy - true_wh_half\n",
    "    true_maxes   = true_box_xy + true_wh_half\n",
    "    \n",
    "    pred_wh_half = pred_box_wh / 2.\n",
    "    pred_mins    = pred_box_xy - pred_wh_half\n",
    "    pred_maxes   = pred_box_xy + pred_wh_half       \n",
    "    \n",
    "    intersect_mins  = tf.maximum(pred_mins,  true_mins)\n",
    "    intersect_maxes = tf.minimum(pred_maxes, true_maxes)\n",
    "    intersect_wh    = tf.maximum(intersect_maxes - intersect_mins, 0.)\n",
    "    intersect_areas = intersect_wh[..., 0] * intersect_wh[..., 1]\n",
    "    \n",
    "    true_areas = true_box_wh[..., 0] * true_box_wh[..., 1]\n",
    "    pred_areas = pred_box_wh[..., 0] * pred_box_wh[..., 1]\n",
    "\n",
    "    union_areas = pred_areas + true_areas - intersect_areas\n",
    "    iou_scores  = tf.truediv(intersect_areas, union_areas)\n",
    "    \n",
    "    true_box_conf = iou_scores * y_true[..., 4]\n",
    "    \n",
    "    ### adjust class probabilities\n",
    "    true_box_class = tf.argmax(y_true[..., 5:], -1)\n",
    "    \n",
    "    \"\"\"\n",
    "    Determine the masks\n",
    "    \"\"\"\n",
    "    ### coordinate mask: simply the position of the ground truth boxes (the predictors)\n",
    "    coord_mask = tf.expand_dims(y_true[..., 4], axis=-1) * COORD_SCALE\n",
    "    \n",
    "    ### confidence mask: penelize predictors + penalize boxes with low IOU\n",
    "    # penalize the confidence of the boxes, which have IOU with some ground truth box < 0.6\n",
    "    true_xy = true_boxes[..., 0:2]\n",
    "    true_wh = true_boxes[..., 2:4]\n",
    "    \n",
    "    true_wh_half = true_wh / 2.\n",
    "    true_mins    = true_xy - true_wh_half\n",
    "    true_maxes   = true_xy + true_wh_half\n",
    "    \n",
    "    pred_xy = tf.expand_dims(pred_box_xy, 4)\n",
    "    pred_wh = tf.expand_dims(pred_box_wh, 4)\n",
    "    \n",
    "    pred_wh_half = pred_wh / 2.\n",
    "    pred_mins    = pred_xy - pred_wh_half\n",
    "    pred_maxes   = pred_xy + pred_wh_half    \n",
    "    \n",
    "    intersect_mins  = tf.maximum(pred_mins,  true_mins)\n",
    "    intersect_maxes = tf.minimum(pred_maxes, true_maxes)\n",
    "    intersect_wh    = tf.maximum(intersect_maxes - intersect_mins, 0.)\n",
    "    intersect_areas = intersect_wh[..., 0] * intersect_wh[..., 1]\n",
    "    \n",
    "    true_areas = true_wh[..., 0] * true_wh[..., 1]\n",
    "    pred_areas = pred_wh[..., 0] * pred_wh[..., 1]\n",
    "\n",
    "    union_areas = pred_areas + true_areas - intersect_areas\n",
    "    iou_scores  = tf.truediv(intersect_areas, union_areas)\n",
    "\n",
    "    best_ious = tf.reduce_max(iou_scores, axis=4)\n",
    "    conf_mask = conf_mask + tf.to_float(best_ious < 0.6) * (1 - y_true[..., 4]) * NO_OBJECT_SCALE\n",
    "    \n",
    "    # penalize the confidence of the boxes, which are reponsible for corresponding ground truth box\n",
    "    conf_mask = conf_mask + y_true[..., 4] * OBJECT_SCALE\n",
    "    \n",
    "    ### class mask: simply the position of the ground truth boxes (the predictors)\n",
    "    class_mask = y_true[..., 4] * tf.gather(CLASS_WEIGHTS, true_box_class) * CLASS_SCALE       \n",
    "    \n",
    "    \"\"\"\n",
    "    Warm-up training\n",
    "    \"\"\"\n",
    "    no_boxes_mask = tf.to_float(coord_mask < COORD_SCALE/2.)\n",
    "    seen = tf.assign_add(seen, 1.)\n",
    "    \n",
    "    true_box_xy, true_box_wh, coord_mask = tf.cond(tf.less(seen, WARM_UP_BATCHES), \n",
    "                          lambda: [true_box_xy + (0.5 + cell_grid) * no_boxes_mask, \n",
    "                                   true_box_wh + tf.ones_like(true_box_wh) * np.reshape(ANCHORS, [1,1,1,BOX,2]) * no_boxes_mask, \n",
    "                                   tf.ones_like(coord_mask)],\n",
    "                          lambda: [true_box_xy, \n",
    "                                   true_box_wh,\n",
    "                                   coord_mask])\n",
    "    \n",
    "    \"\"\"\n",
    "    Finalize the loss\n",
    "    \"\"\"\n",
    "    nb_coord_box = tf.reduce_sum(tf.to_float(coord_mask > 0.0))\n",
    "    nb_conf_box  = tf.reduce_sum(tf.to_float(conf_mask  > 0.0))\n",
    "    nb_class_box = tf.reduce_sum(tf.to_float(class_mask > 0.0))\n",
    "    \n",
    "    loss_xy    = tf.reduce_sum(tf.square(true_box_xy-pred_box_xy)     * coord_mask) / (nb_coord_box + 1e-6) / 2.\n",
    "    loss_wh    = tf.reduce_sum(tf.square(true_box_wh-pred_box_wh)     * coord_mask) / (nb_coord_box + 1e-6) / 2.\n",
    "    loss_conf  = tf.reduce_sum(tf.square(true_box_conf-pred_box_conf) * conf_mask)  / (nb_conf_box  + 1e-6) / 2.\n",
    "    loss_class = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=true_box_class, logits=pred_box_class)\n",
    "    loss_class = tf.reduce_sum(loss_class * class_mask) / (nb_class_box + 1e-6)\n",
    "    \n",
    "    loss = loss_xy + loss_wh + loss_conf + loss_class\n",
    "    \n",
    "    nb_true_box = tf.reduce_sum(y_true[..., 4])\n",
    "    nb_pred_box = tf.reduce_sum(tf.to_float(true_box_conf > 0.5) * tf.to_float(pred_box_conf > 0.3))\n",
    "\n",
    "    \"\"\"\n",
    "    Debugging code\n",
    "    \"\"\"    \n",
    "    current_recall = nb_pred_box/(nb_true_box + 1e-6)\n",
    "    total_recall = tf.assign_add(total_recall, current_recall) \n",
    "\n",
    "    loss = tf.Print(loss, [tf.zeros((1))], message='Dummy Line \\t', summarize=1000)\n",
    "    loss = tf.Print(loss, [loss_xy], message='Loss XY \\t', summarize=1000)\n",
    "    loss = tf.Print(loss, [loss_wh], message='Loss WH \\t', summarize=1000)\n",
    "    loss = tf.Print(loss, [loss_conf], message='Loss Conf \\t', summarize=1000)\n",
    "    loss = tf.Print(loss, [loss_class], message='Loss Class \\t', summarize=1000)\n",
    "    loss = tf.Print(loss, [loss], message='Total Loss \\t', summarize=1000)\n",
    "    loss = tf.Print(loss, [current_recall], message='Current Recall \\t', summarize=1000)\n",
    "    loss = tf.Print(loss, [total_recall/seen], message='Average Recall \\t', summarize=1000)\n",
    "    \n",
    "    return loss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**用來產生Keras訓練模型的BatchGenerator的設定:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:38:44.283547Z",
     "start_time": "2017-11-26T12:38:44.277155Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "generator_config = {\n",
    "    'IMAGE_H'         : IMAGE_H, # YOLOv2網絡輸入的image_h\n",
    "    'IMAGE_W'         : IMAGE_W, # YOLOv2網絡輸入的image_w\n",
    "    'GRID_H'          : GRID_H,  # 直向網格的拆分數量\n",
    "    'GRID_W'          : GRID_W,  # 橫向網格的拆分數量\n",
    "    'BOX'             : BOX,     # 每個單一網格要預測的邊界框數量\n",
    "    'LABELS'          : LABELS,  # 要預測的圖像種類列表\n",
    "    'CLASS'           : len(LABELS), # 要預測的圖像種類數\n",
    "    'ANCHORS'         : ANCHORS, # 每個單一網格要預測的邊界框時用的錨點\n",
    "    'BATCH_SIZE'      : BATCH_SIZE, # 訓練時的批量數\n",
    "    'TRUE_BOX_BUFFER' : 50, # 一個訓練圖像最大數量的邊界框數\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 解析圖像標註檔 (annotation.txt)\n",
    "由於這個資料集的標註檔並不是採用PASCAL VOC格式而是自行定義的格式, 因此要對標註檔的解析進行客製化的處理。\n",
    "\n",
    "* 格式 : filepath,x1,y1,x2,y2,character \n",
    "* x1,y1 : 邊界框的左上角座標\n",
    "* x2,y2 : 邊界框的右下角座標\n",
    "\n",
    "以下是範例資料:\n",
    "```\n",
    "./characters/abraham_grampa_simpson/pic_0000.jpg,57,72,52,72,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0001.jpg,80,31,337,354,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0002.jpg,128,48,285,407,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0003.jpg,72,126,158,275,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0004.jpg,123,61,294,416,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0005.jpg,115,18,498,413,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0006.jpg,171,47,423,413,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0007.jpg,120,53,381,409,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0008.jpg,149,56,398,406,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0009.jpg,205,41,470,456,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0010.jpg,71,29,265,424,abraham_grampa_simpson\n",
    "./characters/abraham_grampa_simpson/pic_0011.jpg,2,24,176,408,abraham_grampa_simpson\n",
    "...\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from tqdm import tqdm\n",
    "\n",
    "def parse_simpson_annotation(ann_dir, img_dir, labels=[]):\n",
    "    \"\"\"解析圖像標註檔\n",
    "    * 格式 : filepath,x1,y1,x2,y2,character \n",
    "    * x1,y1 : 邊界框的左上角座標\n",
    "    * x2,y2 : 邊界框的右下角座標\n",
    "    \n",
    "    將每個圖像的檔名(filename)、圖像的寬(width)、高(height)、圖像的類別(name)以\n",
    "    及物體的邊界框的坐標(xmin,ymin,xmax,ymax)擷取出來。以下是圖像標註檔的範例:\n",
    "    \n",
    "    ./characters/abraham_grampa_simpson/pic_0000.jpg,57,72,52,72,abraham_grampa_simpson\n",
    "    ./characters/abraham_grampa_simpson/pic_0001.jpg,80,31,337,354,abraham_grampa_simpson\n",
    "    ./characters/abraham_grampa_simpson/pic_0002.jpg,128,48,285,407,abraham_grampa_simpson\n",
    "    \n",
    "    擷取目標: [filepath,x1,y1,x2,y2,character]\n",
    "    參數:\n",
    "        ann_dir: 圖像標註檔存放的目錄路徑\n",
    "        img_dir: 圖像檔存放的目錄路徑\n",
    "        labels: 圖像資料集的物體類別列表\n",
    "\n",
    "    回傳:\n",
    "        all_imgs: 一個列表物件, 每一個物件都包括了要訓練用的重要資訊。例如:\n",
    "                    {\n",
    "                        'filename': '/tmp/img/img001.jpg',\n",
    "                        'width': 128,\n",
    "                        'height': 128,\n",
    "                        'object':[\n",
    "                            {'name':'person',xmin:0, ymin:0, xmax:28, ymax:28},\n",
    "                            {'name':'person',xmin:45, ymin:45, xmax:60, ymax:60}\n",
    "                        ]\n",
    "                    }\n",
    "        seen_labels: 一個字典物件(k:圖像類別, v:出現的次數)用來檢視每一個圖像類別出現的次數\n",
    "    \"\"\"\n",
    "    print(\"start parsing annotation..\")\n",
    "    \n",
    "    annotation_filename='annotation.txt'\n",
    "    \n",
    "    all_imgs = []\n",
    "    seen_labels = {}\n",
    "    \n",
    "    with open(os.path.join(ann_dir, annotation_filename), 'r') as ann:\n",
    "        # 一行一行讀進來處理\n",
    "        for cnt, line in enumerate(ann):\n",
    "            # 建立物件來保存圖像相關資訊\n",
    "            img = {'object':[]}\n",
    "            \n",
    "            # 建立物件來保留bbox\n",
    "            obj = {}\n",
    "                \n",
    "            # 使用','來進行split\n",
    "            tokens = line.split(',')\n",
    "            img_path = tokens[0]\n",
    "            bbox_x1 = int(tokens[1])\n",
    "            bbox_y1 = int(tokens[2])\n",
    "            bbox_x2 = int(tokens[3])\n",
    "            bbox_y2 = int(tokens[4])\n",
    "            label = tokens[5].strip('\\n') # 去除換行字符\n",
    "            \n",
    "            img_path_tokens = img_path.split('/')\n",
    "            img_filename = img_path_tokens[3] # 取得圖像檔名\n",
    "            # 圖檔檔案路徑\n",
    "            img['filename'] = os.path.join(img_dir, label, img_filename) # 串出在專案中的圖像真實路徑\n",
    "            \n",
    "            obj['name'] = label\n",
    "            \n",
    "            if obj['name'] in seen_labels:\n",
    "                seen_labels[obj['name']] += 1\n",
    "            else:\n",
    "                seen_labels[obj['name']] = 1\n",
    "                \n",
    "            obj['xmin'] = bbox_x1\n",
    "            obj['ymin'] = bbox_y1\n",
    "            obj['xmax'] = bbox_x2\n",
    "            obj['ymax'] = bbox_y2\n",
    "            \n",
    "            #檢看是是否有物體的標籤是沒有在傳入的物體類別(labels)中\n",
    "            if len(labels) > 0 and obj['name'] not in labels:\n",
    "                continue\n",
    "            else:\n",
    "                img['object'] += [obj]\n",
    "            \n",
    "            # 把img物件加進要回傳的列表中\n",
    "            if len(['object']) > 0:\n",
    "                all_imgs += [img]\n",
    "                \n",
    "    print(\"Parsing annotation completed!\")\n",
    "    print(\"Total: {} images processed.\".format(len(all_imgs)))\n",
    "    \n",
    "    return all_imgs, seen_labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "start parsing annotation..\n",
      "Parsing annotation completed!\n",
      "Total: 6752 images processed.\n",
      "start parsing annotation..\n",
      "Parsing annotation completed!\n",
      "Total: 6752 images processed.\n"
     ]
    }
   ],
   "source": [
    "# 進行圖像標註檔的解析\n",
    "train_imgs, seen_train_labels = parse_simpson_annotation(train_annot_folder, train_image_folder, labels=LABELS)\n",
    "\n",
    "# 建立一個訓練用的資料產生器\n",
    "train_batch = BatchGenerator(train_imgs, generator_config, norm=normalize)\n",
    "\n",
    "# 進行圖像標註檔的解析\n",
    "valid_imgs, seen_valid_labels = parse_simpson_annotation(valid_annot_folder, valid_image_folder, labels=LABELS)\n",
    "\n",
    "# 建立一個驗證用的資料產生器\n",
    "valid_batch = BatchGenerator(valid_imgs, generator_config, norm=normalize, jitter=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**設置一些回調函式並開始訓練**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-26T12:38:15.714460Z",
     "start_time": "2017-11-26T12:38:15.708674Z"
    },
    "code_folding": [],
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 如果超過15次的循環在loss的收歛上沒有改善就停止訓練 \n",
    "early_stop = EarlyStopping(monitor='val_loss', \n",
    "                           min_delta=0.001, \n",
    "                           patience=15,  # 如果超過15次的循環在loss的收歛上沒有改善就停止訓練 \n",
    "                           mode='min', \n",
    "                           verbose=1)\n",
    "\n",
    "# 每次的訓練循都去比較模型的loss是否有改善, 有就把模型的權重儲存下來\n",
    "checkpoint = ModelCheckpoint('weights_simpson.h5', \n",
    "                             monitor='val_loss', \n",
    "                             verbose=1, \n",
    "                             save_best_only=True, \n",
    "                             mode='min', \n",
    "                             period=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**開始訓練**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "start_time": "2017-11-26T20:38:54.037Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 00001: val_loss improved from inf to 3.18072, saving model to weights_simpson.h5\n",
      "Epoch 00002: val_loss improved from 3.18072 to 1.99200, saving model to weights_simpson.h5\n",
      "Epoch 00003: val_loss improved from 1.99200 to 1.30476, saving model to weights_simpson.h5\n",
      "Epoch 00004: val_loss improved from 1.30476 to 0.83596, saving model to weights_simpson.h5\n",
      "Epoch 00005: val_loss improved from 0.83596 to 0.76634, saving model to weights_simpson.h5\n",
      "Epoch 00006: val_loss improved from 0.76634 to 0.63951, saving model to weights_simpson.h5\n",
      "Epoch 00007: val_loss improved from 0.63951 to 0.53869, saving model to weights_simpson.h5\n",
      "Epoch 00008: val_loss improved from 0.53869 to 0.45551, saving model to weights_simpson.h5\n",
      "Epoch 00009: val_loss improved from 0.45551 to 0.45421, saving model to weights_simpson.h5\n",
      "Epoch 00010: val_loss improved from 0.45421 to 0.38951, saving model to weights_simpson.h5\n",
      "Epoch 00011: val_loss improved from 0.38951 to 0.37767, saving model to weights_simpson.h5\n",
      "Epoch 00012: val_loss improved from 0.37767 to 0.36876, saving model to weights_simpson.h5\n",
      "Epoch 00013: val_loss improved from 0.36876 to 0.33026, saving model to weights_simpson.h5\n",
      "Epoch 00014: val_loss improved from 0.33026 to 0.31182, saving model to weights_simpson.h5\n",
      "Epoch 00015: val_loss did not improve\n",
      "Epoch 00016: val_loss did not improve\n",
      "Epoch 00017: val_loss improved from 0.31182 to 0.29208, saving model to weights_simpson.h5\n",
      "Epoch 00018: val_loss did not improve\n",
      "Epoch 00019: val_loss improved from 0.29208 to 0.24885, saving model to weights_simpson.h5\n",
      "Epoch 00020: val_loss did not improve\n",
      "Epoch 00021: val_loss did not improve\n",
      "Epoch 00022: val_loss improved from 0.24885 to 0.22150, saving model to weights_simpson.h5\n",
      "Epoch 00023: val_loss did not improve\n",
      "Epoch 00024: val_loss did not improve\n",
      "Epoch 00025: val_loss did not improve\n",
      "Epoch 00026: val_loss improved from 0.22150 to 0.22097, saving model to weights_simpson.h5\n",
      "Epoch 00027: val_loss did not improve\n",
      "Epoch 00028: val_loss improved from 0.22097 to 0.18815, saving model to weights_simpson.h5\n",
      "Epoch 00029: val_loss improved from 0.18815 to 0.18446, saving model to weights_simpson.h5\n",
      "Epoch 00030: val_loss did not improve\n",
      "Epoch 00031: val_loss did not improve\n",
      "Epoch 00032: val_loss did not improve\n",
      "Epoch 00033: val_loss did not improve\n",
      "Epoch 00034: val_loss improved from 0.18446 to 0.18282, saving model to weights_simpson.h5\n",
      "Epoch 00035: val_loss improved from 0.18282 to 0.18215, saving model to weights_simpson.h5\n",
      "Epoch 00036: val_loss improved from 0.18215 to 0.17343, saving model to weights_simpson.h5\n",
      "Epoch 00037: val_loss did not improve\n",
      "Epoch 00038: val_loss improved from 0.17343 to 0.17310, saving model to weights_simpson.h5\n",
      "Epoch 00039: val_loss did not improve\n",
      "Epoch 00040: val_loss improved from 0.17310 to 0.16600, saving model to weights_simpson.h5\n",
      "Epoch 00041: val_loss improved from 0.16600 to 0.15310, saving model to weights_simpson.h5\n",
      "Epoch 00042: val_loss did not improve\n",
      "Epoch 00043: val_loss improved from 0.15310 to 0.15206, saving model to weights_simpson.h5\n",
      "Epoch 00044: val_loss improved from 0.15206 to 0.14200, saving model to weights_simpson.h5\n",
      "Epoch 00045: val_loss improved from 0.14200 to 0.14074, saving model to weights_simpson.h5\n",
      "Epoch 00046: val_loss improved from 0.14074 to 0.13236, saving model to weights_simpson.h5\n",
      "Epoch 00047: val_loss improved from 0.13236 to 0.13149, saving model to weights_simpson.h5\n",
      "Epoch 00048: val_loss did not improve\n",
      "Epoch 00049: val_loss did not improve\n",
      "Epoch 00050: val_loss improved from 0.13149 to 0.11866, saving model to weights_simpson.h5\n",
      "Epoch 00051: val_loss did not improve\n",
      "Epoch 00052: val_loss did not improve\n",
      "Epoch 00053: val_loss did not improve\n",
      "Epoch 00054: val_loss improved from 0.11866 to 0.11821, saving model to weights_simpson.h5\n",
      "Epoch 00055: val_loss did not improve\n",
      "Epoch 00056: val_loss improved from 0.11821 to 0.11787, saving model to weights_simpson.h5\n",
      "Epoch 00057: val_loss did not improve\n",
      "Epoch 00058: val_loss improved from 0.11787 to 0.11445, saving model to weights_simpson.h5\n",
      "Epoch 00059: val_loss improved from 0.11445 to 0.10280, saving model to weights_simpson.h5\n",
      "Epoch 00060: val_loss did not improve\n",
      "Epoch 00061: val_loss did not improve\n",
      "Epoch 00062: val_loss did not improve\n",
      "Epoch 00063: val_loss did not improve\n",
      "Epoch 00064: val_loss did not improve\n",
      "Epoch 00065: val_loss did not improve\n",
      "Epoch 00066: val_loss improved from 0.10280 to 0.09757, saving model to weights_simpson.h5\n",
      "Epoch 00067: val_loss improved from 0.09757 to 0.09693, saving model to weights_simpson.h5\n",
      "Epoch 00068: val_loss improved from 0.09693 to 0.09171, saving model to weights_simpson.h5\n",
      "Epoch 00069: val_loss improved from 0.09171 to 0.09080, saving model to weights_simpson.h5\n",
      "Epoch 00070: val_loss did not improve\n",
      "Epoch 00071: val_loss did not improve\n",
      "Epoch 00072: val_loss improved from 0.09080 to 0.08777, saving model to weights_simpson.h5\n",
      "Epoch 00073: val_loss did not improve\n",
      "Epoch 00074: val_loss did not improve\n",
      "Epoch 00075: val_loss improved from 0.08777 to 0.08549, saving model to weights_simpson.h5\n",
      "Epoch 00076: val_loss did not improve\n",
      "Epoch 00077: val_loss improved from 0.08549 to 0.08360, saving model to weights_simpson.h5\n",
      "Epoch 00078: val_loss did not improve\n",
      "Epoch 00079: val_loss did not improve\n",
      "Epoch 00080: val_loss did not improve\n",
      "Epoch 00081: val_loss did not improve\n",
      "Epoch 00082: val_loss did not improve\n",
      "Epoch 00083: val_loss did not improve\n",
      "Epoch 00084: val_loss did not improve\n",
      "Epoch 00085: val_loss did not improve\n",
      "Epoch 00086: val_loss improved from 0.08360 to 0.08344, saving model to weights_simpson.h5\n",
      "Epoch 00087: val_loss improved from 0.08344 to 0.07796, saving model to weights_simpson.h5\n",
      "Epoch 00088: val_loss improved from 0.07796 to 0.07251, saving model to weights_simpson.h5\n",
      "Epoch 00089: val_loss did not improve\n",
      "Epoch 00090: val_loss did not improve\n",
      "Epoch 00091: val_loss did not improve\n",
      "Epoch 00092: val_loss did not improve\n",
      "Epoch 00093: val_loss improved from 0.07251 to 0.06798, saving model to weights_simpson.h5\n",
      "Epoch 00094: val_loss did not improve\n",
      "Epoch 00095: val_loss did not improve\n",
      "Epoch 00096: val_loss did not improve\n",
      "Epoch 00097: val_loss did not improve\n",
      "Epoch 00098: val_loss did not improve\n",
      "Epoch 00099: val_loss did not improve\n",
      "Epoch 00100: val_loss did not improve\n"
     ]
    }
   ],
   "source": [
    "optimizer = Adam(lr=0.5e-4, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)\n",
    "#optimizer = SGD(lr=1e-4, decay=0.0005, momentum=0.9)\n",
    "#optimizer = RMSprop(lr=1e-4, rho=0.9, epsilon=1e-08, decay=0.0)\n",
    "\n",
    "model.compile(loss=custom_loss, optimizer=optimizer)\n",
    "\n",
    "history = model.fit_generator(generator        = train_batch, \n",
    "                    steps_per_epoch  = len(train_batch), \n",
    "                    epochs           = 100, # 進行100個訓練循環\n",
    "                    verbose          = 0,\n",
    "                    validation_data  = valid_batch,\n",
    "                    validation_steps = len(valid_batch),\n",
    "                    callbacks        = [early_stop, checkpoint], \n",
    "                    max_queue_size   = 3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### STEP 6. 圖像的物體偵測"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-22T14:07:49.271978Z",
     "start_time": "2017-11-22T14:07:49.268999Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 載入訓練好的模型權重\n",
    "model.load_weights(\"weights_simpson.h5\")\n",
    "\n",
    "# 產生一個Dummy的標籤輸入\n",
    "\n",
    "# 在訓練階段放的是真實的邊界框與圖像類別訊息\n",
    "# 但在預測階段還是需要有一個Dummy的輸入, 因為定義在網絡的結構中有兩個輸入： \n",
    "#   1.圖像的輸人 \n",
    "#   2.圖像邊界框/錨點/信心分數的輸入\n",
    "dummy_array = np.zeros((1,1,1,1,TRUE_BOX_BUFFER,4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 進行圖像的偵測\n",
    "\n",
    "從訓練圖像中隨機選一張圖像來進行偵測"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-11-22T14:07:52.566171Z",
     "start_time": "2017-11-22T14:07:50.655879Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x209aca8dcc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 選一張圖像\n",
    "img_filepath = train_imgs[np.random.randint(len(train_imgs))]['filename']\n",
    "\n",
    "# 使用OpenCV讀入圖像\n",
    "image = cv2.imread(img_filepath) # 載入圖像\n",
    "\n",
    "plt.figure(figsize=(10,10))\n",
    "\n",
    "# 進行圖像輸入的前處理\n",
    "input_image = cv2.resize(image, (416, 416)) # 載入圖像\n",
    "input_image = input_image / 255. # 進行圖像歸一處理\n",
    "input_image = np.expand_dims(input_image, 0) # 增加 batch dimension\n",
    "\n",
    "# 進行圖像偵測\n",
    "netout = model.predict([input_image, dummy_array])\n",
    "\n",
    "# 解析網絡的輸出來取得最後偵測出來的邊界框(bounding boxes)列表\n",
    "boxes = decode_netout(netout[0], \n",
    "                      obj_threshold=OBJ_THRESHOLD,\n",
    "                      nms_threshold=NMS_THRESHOLD,\n",
    "                      anchors=ANCHORS, \n",
    "                      nb_class=CLASS)\n",
    "\n",
    "# \"draw_bgr_image_boxes\"\n",
    "# 一個簡單把邊界框與預測結果打印到原始圖像(BGR)上的工具函式\n",
    "# 參數: image 是image的numpy ndarray [h, w, channels(BGR)]\n",
    "#       boxes 是偵測的結果\n",
    "#       labels 是模型訓練的圖像類別列表\n",
    "# 回傳： image 是image的numpy ndarray [h, w, channels(RGB)]\n",
    "image = draw_bgr_image_boxes(image, boxes, labels=LABELS)\n",
    "\n",
    "# 把最後的結果秀出來\n",
    "plt.imshow(image)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### STEP 6. 影像的物體偵測"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-10-06T13:28:28.029334Z",
     "start_time": "2017-10-06T13:28:28.024662Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 載入訓練好的模型權重\n",
    "model.load_weights(\"weights_simpson.h5\")\n",
    "\n",
    "# 產生一個Dummy的標籤輸入\n",
    "\n",
    "# 在訓練階段放的是真實的邊界框與圖像類別訊息\n",
    "# 但在預測階段還是需要有一個Dummy的輸入, 因為定義在網絡的結構中有兩個輸入： \n",
    "#   1.圖像的輸人 \n",
    "#   2.圖像邊界框/錨點/信心分數的輸入\n",
    "dummy_array = np.zeros((1,1,1,1,TRUE_BOX_BUFFER,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-10-06T13:39:09.640646Z",
     "start_time": "2017-10-06T13:31:44.627609Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████| 7828/7828 [03:44<00:00, 34.94it/s]\n"
     ]
    }
   ],
   "source": [
    "# 資料集目錄\n",
    "VIDEO_INPUT_FILENAME = \"the_simpsons_after_8_years.mp4\"\n",
    "VIDEO_OUTPUT_FILENAME = \"the_simpsons_after_8_years_yolov2.mp4\"\n",
    "\n",
    "# 選擇要進行辛普森卡通圖像角色偵測的影像檔\n",
    "# 在這個測試我從YOUTUBE下載了: https://www.youtube.com/watch?v=F2hJ4hvbsog\n",
    "video_inp =  os.path.join(DATA_SET_PATH, VIDEO_INPUT_FILENAME)\n",
    "\n",
    "# 偵測結果的輸出影像檔\n",
    "video_out =  os.path.join(DATA_SET_PATH, VIDEO_OUTPUT_FILENAME)\n",
    "\n",
    "# 透過OpenCv擷取影像\n",
    "video_reader = cv2.VideoCapture(video_inp)\n",
    "\n",
    "# 取得影像的基本資訊\n",
    "nb_frames = int(video_reader.get(cv2.CAP_PROP_FRAME_COUNT)) # 總共有多少frames\n",
    "frame_h = int(video_reader.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 每個frame的高\n",
    "frame_w = int(video_reader.get(cv2.CAP_PROP_FRAME_WIDTH))   # 每個frame的寬\n",
    "\n",
    "# 設定影像的輸出\n",
    "video_writer = cv2.VideoWriter(video_out,\n",
    "                               cv2.VideoWriter_fourcc(*'XVID'), \n",
    "                               50.0, \n",
    "                               (frame_w, frame_h))\n",
    "\n",
    "# 迭代每一個frame來進行圖像偵測\n",
    "for i in tqdm(range(nb_frames)):\n",
    "    ret, image = video_reader.read() # 讀取一個frame\n",
    "    \n",
    "    input_image = cv2.resize(image, (416, 416)) # 修改輸入圖像大小來符合模型的要求\n",
    "    input_image = input_image / 255. # 進行圖像歸一處理\n",
    "    input_image = np.expand_dims(input_image, 0) # 增加 batch dimension\n",
    "\n",
    "    # 進行圖像偵測\n",
    "    netout = model.predict([input_image, dummy_array])\n",
    "\n",
    "    # 解析網絡的輸出來取得最後偵測出來的邊界框(bounding boxes)列表\n",
    "    boxes = decode_netout(netout[0], \n",
    "                          obj_threshold=OBJ_THRESHOLD,\n",
    "                          nms_threshold=NMS_THRESHOLD,\n",
    "                          anchors=ANCHORS, \n",
    "                          nb_class=CLASS)\n",
    "    \n",
    "    # \"draw_bgr_image_boxes\"\n",
    "    # 一個簡單把邊界框與預測結果打印到原始圖像(BGR)上的工具函式\n",
    "    # 參數: image 是image的numpy ndarray [h, w, channels(BGR)]\n",
    "    #       boxes 是偵測的結果\n",
    "    #       labels 是模型訓練的圖像類別列表\n",
    "    # 回傳： image 是image的numpy ndarray [h, w, channels(RGB)]\n",
    "    image = draw_bgr_image_boxes(image, boxes, labels=LABELS)\n",
    "\n",
    "    # 透過OpenCV把影像輸出出來\n",
    "    video_writer.write(np.uint8(image[:,:,::-1])) # 轉換 RGB -> BGR來讓Open CV寫Video\n",
    "    \n",
    "video_reader.release() # 釋放資源\n",
    "video_writer.release() # 釋放資源"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "參考:\n",
    "* [YOLO官網](https://pjreddie.com/darknet/yolo/)\n",
    "* [llSourcell/YOLO_Object_Detection](https://github.com/llSourcell/YOLO_Object_Detection)\n",
    "* [experiencor/basic-yolo-keras](https://github.com/experiencor/basic-yolo-keras)\n",
    "* [The Simpsons characters recognition and detection using Keras (Part 1)](https://medium.com/alex-attia-blog/the-simpsons-character-recognition-using-keras-d8e1796eae36)\n",
    "* [The Simpsons characters recognition and detection (Part 2)](https://medium.com/alex-attia-blog/the-simpsons-characters-recognition-and-detection-part-2-c44f9d5abf37)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.4"
  },
  "toc": {
   "nav_menu": {
    "height": "381px",
    "width": "251px"
   },
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {
    "height": "758px",
    "left": "0px",
    "right": "1096px",
    "top": "73px",
    "width": "253px"
   },
   "toc_section_display": "block",
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
